
-- 获取token并判定是否中奖
-- 返回值：-2=活动未开始 -1=活动已结束 0=到达最大抽奖次数 1=未中奖 else=中奖，返回了拿到的令牌
-- 当前系统时间
local curTime = tonumber(KEYS[4])
-- 验证活动是否开始
local startTime = redis.call('get','game_info_' .. KEYS[1] .. '_startTime')
if tonumber(startTime) > curTime then
    return -2;
end
-- 验证活动是否结束
local endTime = redis.call('get','game_info_' .. KEYS[1] .. '_endTime')
if tonumber(endTime) < curTime then
    return -1;
end
-- 判断用户是否达到最大抽奖次数
local maxEnter = redis.call('get', 'game_maxenter_' .. KEYS[1] .. '_' .. KEYS[3])
local enterCount = redis.call('get', 'game_enterCount_' .. KEYS[1] .. '_' .. KEYS[2])
if enterCount ~= false and tonumber(maxEnter) ~=0 and tonumber(maxEnter) <=  tonumber(enterCount) then
    return 0;
end

-- 开始抽奖操作
redis.call('incr', 'game_enterCount_' .. KEYS[1] .. '_' .. KEYS[2])
-- 判断用户是否达到最大中奖次数
local maxGoal = tonumber(redis.call('get', 'game_maxgoal_' .. KEYS[1] .. '_' .. KEYS[3]))
local userGoal = redis.call('get', 'game_userHit_' .. KEYS[1] .. '_' .. KEYS[2])
if userGoal ~= false and maxGoal ~=0 and maxGoal <=  tonumber(userGoal) then
    return 1;
end
-- 从左侧获取一个token
local token = redis.call('lpop', 'game_token_' .. KEYS[1])
if token ~= false then
    -- token是毫秒，并且尾部加了3位随机数，curtime是秒，相差6位
    if tonumber(token)/1000 > curTime then
        redis.call('lpush', 'game_token_' .. KEYS[1], token)
        return 1
    -- 否则表示token有效，中奖，用户中奖数+1，返回token令牌
    else
        local hit = redis.call('incr','game_userHit_' .. KEYS[1] .. '_' .. KEYS[2])
        return tonumber(token)
    end
else
    -- 取不到token，表示抽光了，返回1
    return 1
end